#include<bits/stdc++.h>
#define LL long long
#define lowbit(i) i&(-i)
using namespace std;
const int maxn=1001000+5;
int C[maxn],D[maxn],low[maxn];
int E,elast[maxn],p[maxn],depth[maxn];
int getsum(int x) {
	int ans=0;
	while(x) ans+=C[x],x-=lowbit(x);
	return ans;
}
void add(int x,int k,int n) {
	while(x<=n) C[x]+=k,x+=lowbit(x);
}
struct Edge {
	int u,v,w,nXt;
} e[maxn];

void get_add(int u,int v/*,int w*/) {
	e[++E].u=u;
	e[E].v=v;
	e[E].w=/*w*/1;
	e[E].nXt=elast[u];
	elast[u]=E;
}
int cnt=0;
void dfs(int x,int fa) {
	D[x]=++cnt,low[x]=cnt;
	depth[x]=depth[fa]+1;
    int y;
	for(int i=elast[x]; i; i=e[i].nXt) {
		y=e[i].v;
		if(y==fa) continue;
		dfs(y,x);
	}
	low[x]=cnt;
}
int read() {
	int x;
	scanf("%d",&x);
	return x;
}
int main() {
	// int tot=0;
	int n=read();
	for(int i=1,u=0,v=0; i<n; i++) {
        u=read(),v=read();
		get_add(u,v/*,1*/);
		get_add(v,u/*,1*/);
	}
	dfs(1,-1);
	// int m=(read()+n--);
    int m=read()+n;
    m--;
	char ch;
    int a,b;
	for(int i=1;i<=m;i++) {
		cin>>ch;
        if((ch)=='A') {
            a=read(),b=read();
			add(D[b],1,n);
			add(low[b]+1,-1,n);
		}
		if((ch)=='W') {
            a=read();
			printf("%d\n",depth[a]-getsum(D[a])-1);
		}
	}
}